package views.mediators {
  import com.axon.base.helpers.AxFailure;
  import com.axon.base.managers.AxErrorManager;
  import com.axon.mvc.helpers.AxVerbs;
  import com.axon.mvc.patterns.mediator.AxMediator;

  import flash.display.DisplayObject;

  import helpers.Constants;
  import helpers.ListaPleitos;
  import helpers.Verbs;

  import models.vo.Pleito;
  import models.vo.User;

  import mx.containers.TabNavigator;

  import views.components.PleitoListaDistribuicaoView;

  public class PleitoListaDistribuicaoMediator extends AxMediator {
    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function PleitoListaDistribuicaoMediator(viewComponent:DisplayObject) {
      super(viewComponent);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function get view():PleitoListaDistribuicaoView {
      return this.viewComponent as PleitoListaDistribuicaoView;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    override protected function initialize():void {
      regBroadcastInterests([AxVerbs.REFRESH]);

      regResponseInterest(Pleito, [AxVerbs.LIST,
        Verbs.DISTRIBUIR
        ]);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventViewShow():void {
      view.adgMain.dataProvider = null;
      view.adgMain.setFocus();
      callController(Pleito, AxVerbs.LIST, Constants.MNEMONICO_LISTA_DISTRIBUICAO);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function eventEnableGestures():void {
      view.pbAbrir.enabled = (view.selectedPleito != null);

      view.pbDistribuir.enabled = (view.pbAbrir.enabled)
        && (AppFacade.getInstance().sessionProxy.user.hasRole(User.ROLE_DISTRIBUIDOR));

      view.pbRegistrarDocumentos.enabled = (view.pbAbrir.enabled)
        && (AppFacade.getInstance().sessionProxy.user.hasRole(User.ROLE_CONFERENTE))
        && ((view.selectedPleito.status == Constants.STATUS_PLEITO_ANALISE) ||
        (view.selectedPleito.status == Constants.STATUS_PLEITO_DISTRIBUICAO));

      if (view.selectedPleito)
        view.pbDistribuir.label = (Pleito(view.selectedPleito).emDistribuicao()) ? 'Distribuir' : 'Redistribuir';

    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function brcastRefresh(sender:Object, body:Object, extraInfo:Object):void {
      AppFacade(facade).pleitoProxy.listaDistribuicao.invalidate();

      if ((view.parent is TabNavigator) && ((view.parent as TabNavigator).selectedChild == view))
        eventViewShow();
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function respPleitoListSuccess(sender:Object, body:Object, extraInfo:Object):void {
      if (body == AppFacade(facade).pleitoProxy.listaDistribuicao) {
        view.adgMain.dataProvider = (body as ListaPleitos).modelsCollection;
        view.adgMain.axRecallLastSelection();
      }
    }

    public function respPleitoListFailure(sender:Object, body:Object, extraInfo:Object):void {
      if (body == AppFacade(facade).pleitoProxy.listaDistribuicao)
        AxErrorManager.showFailure(new AxFailure("Falha no carregamento da lista de pleitos aguardando distribuição."));
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function respPleitoDistribuirSuccess(sender:Object, body:Object, extraInfo:Object):void {
      view.adgMain.axReplaceSelectedItem(body);
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////

    public function respPleitoDistribuirFailure(sender:Object, body:Object, extraInfo:Object):void {
      AxErrorManager.showFailure(new AxFailure("Falha na distribuição (provavelmente problema no servidor)."));
    }

  }
}